home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / admin / linuxcon.000 / linuxcon / linuxconf-1.6 / fstab / fstab.h < prev    next >
C/C++ Source or Header  |  1996-04-18  |  4KB  |  171 lines

  1. #pragma interface
  2. #ifndef FSTAB_H
  3. #define FSTAB_H
  4.  
  5. #include "../misc/misc.h"
  6.  
  7. #define PARTITION_OS2_HPFS    0x07
  8. #define PARTITION_LINUX_MINIX    0x81
  9. #define PARTITION_LINUX_SWAP    0x82
  10. #define PARTITION_LINUX_NATIVE    0x83
  11. #define PARTITION_DOS_ID12    0x01
  12. #define PARTITION_DOS_ID16    0x04
  13. #define PARTITION_DOS_ID1632    0x06
  14. #define PARTITION_DOS_IDEXT    0x05
  15.  
  16. enum FSTAB_ENTRY_TYPE {
  17.     FSTAB_ENTRY_LOCAL=0,
  18.     FSTAB_ENTRY_NFS=1,
  19.     FSTAB_ENTRY_SAMBA=2,
  20.     FSTAB_ENTRY_SWAP=3,
  21.     FSTAB_ENTRY_NOVELL=4,
  22.     FSTAB_ENTRY_PROC=5,
  23. };
  24.  
  25. class PARTITION: public ARRAY_OBJ{
  26.     char drive_letter;
  27.     char *dev;    // Block special device
  28.     int id;        // PARTITION_xxxx 
  29.     long size;    // In block
  30.     /*~PROTOBEG~ PARTITION */
  31. public:
  32.     PARTITION (const char *_dev, int _id, long _size);
  33.     void formatinfo (char *buf);
  34.     const char *getdevice (void);
  35.     char getdosdrive (void);
  36.     int getid (void);
  37.     const char *getos (void);
  38.     long getsize (void);
  39.     int isdos (void);
  40.     int islinux (void);
  41.     int isos2 (void);
  42.     int isswap (void);
  43.     void setdosdrive (char letter);
  44.     ~PARTITION (void);
  45.     /*~PROTOEND~ PARTITION */
  46. };
  47.  
  48. class PARTITIONS: public ARRAY{
  49.     /*~PROTOBEG~ PARTITIONS */
  50. public:
  51.     PARTITIONS (void);
  52.     PARTITION *getitem (const char *device)const;
  53.     PARTITION *getitem (int no)const;
  54. protected:
  55.     void setdosdrive (void);
  56. public:
  57.     /*~PROTOEND~ PARTITIONS */
  58. };
  59.  
  60. class FSTAB_HELP_FILE: public HELP_FILE{
  61.     /*~PROTOBEG~ FSTAB_HELP_FILE */
  62. public:
  63.     FSTAB_HELP_FILE (const char *fname);
  64.     /*~PROTOEND~ FSTAB_HELP_FILE */
  65. };
  66.  
  67. struct FSTAB_BOOL_OPT{
  68.     char noauto;    // Not mount at boot time
  69.     char noexec;    // Not allowed to execute a prog from
  70.                     // this partition
  71.     char readonly;
  72.     char user;        // User mountable
  73.     char nodev;        // No special device file interpretation
  74.     char nosuid;    // No suid program allowed
  75. };
  76. // Msdos and HPFS special option
  77. struct FSTAB_MSDOS_OPT{
  78.     SSTRING conv;        // Conversion mode for msdos
  79.                 // and hpfs
  80.     int uid;
  81.     int gid;
  82.     int perm;
  83. };                    
  84.  
  85. struct FSTAB_NFS_OPT{
  86.     int rsize;
  87.     int wsize;
  88.     char soft;
  89.     char bg;
  90. };
  91.  
  92. /*
  93.     A FS_ENTRY describe one line of the /etc/fstab file.
  94.     It also remember comments. All field (source mpoint etc except
  95.     comment will be NULL).
  96. */
  97. class FSTAB_ENTRY: public ARRAY_OBJ{
  98. protected:
  99.     SSTRING source;        // Device or NFS server+path
  100.     SSTRING mpoint;        // Mount point.
  101.     SSTRING type;        // Filesystem type.
  102.     FSTAB_BOOL_OPT bool_opt;
  103.     FSTAB_MSDOS_OPT msdos_opt;                    
  104.     FSTAB_NFS_OPT nfs_opt;
  105.     SSTRING options;    // All option not directly understood
  106.                 // by this program.
  107.     int dumpfreq;
  108.     int fsckpriority;
  109.     SSTRING comment;
  110.     char valid;            // Tells if the record is valid
  111.                         // If not, it is managed as a comment
  112.     /*~PROTOBEG~ FSTAB_ENTRY */
  113. public:
  114.     FSTAB_ENTRY (const char *line);
  115.     FSTAB_ENTRY (void);
  116.     int check (void);
  117.     int edit (FSTAB_ENTRY_TYPE fstype);
  118.     void format_opt (int tosave, char *str)const;
  119.     const char *getcomment (void);
  120.     const char *getfs (void)const;
  121.     const char *getmpoint (void)const;
  122.     const char *getsource (void)const;
  123.     FSTAB_ENTRY_TYPE gettype (void)const;
  124. private:
  125.     void init (void);
  126. public:
  127.     int is_auto (void);
  128.     int is_remote (void)const;
  129.     int is_swap (void)const;
  130.     int is_valid (void)const;
  131.     void parseopt (char *opts);
  132.     void print (FILE *fout)const;
  133.     void setsource (const char *path);
  134.     /*~PROTOEND~ FSTAB_ENTRY */
  135. };
  136.  
  137. // Common to /etc/fstab and  /etc/mtab
  138. class FSTAB_GEN: public ARRAY{
  139.     /*~PROTOBEG~ FSTAB_GEN */
  140. public:
  141.     FSTAB_ENTRY *getitem (int no);
  142.     FSTAB_ENTRY *locate_mpoint (const char *str);
  143.     /*~PROTOEND~ FSTAB_GEN */
  144. };
  145. class FSTAB: public FSTAB_GEN {
  146. protected:
  147.     /*~PROTOBEG~ FSTAB */
  148. public:
  149.     FSTAB (void);
  150.     void check (void);
  151.     void edit (FSTAB_ENTRY_TYPE fstype);
  152. private:
  153.     void fixroot (FSTAB_ENTRY *root, char *status);
  154. public:
  155.     const char *getrootdev (void);
  156.     int write (void);
  157.     /*~PROTOEND~ FSTAB */
  158. };
  159. class MTAB: public FSTAB_GEN {
  160. protected:
  161.     /*~PROTOBEG~ MTAB */
  162. public:
  163.     MTAB (void);
  164.     /*~PROTOEND~ MTAB */
  165. };
  166.  
  167. #include "fstab.p"
  168.  
  169. #endif
  170.  
  171.